// 基础API请求配置
import { baseUrl } from '../utils/config.js'

// 封装请求函数
export const request = (options) => {
	return new Promise((resolve, reject) => {
		console.log('发起请求:', options.url, options.data);
		
		// 默认请求超时时间为60秒，AI请求为300秒(5分钟)
		const timeout = options.url.includes('/shAi') ? 300000 : 60000;
		console.log(`请求超时时间设置为: ${timeout/1000}秒`);
		
		const requestTask = uni.request({
			url: baseUrl + options.url,
			method: options.method || 'GET',
			data: options.data || {},
			header: options.header || {},
			timeout: timeout, // 设置超时时间
			success: (res) => {
				console.log('请求成功:', options.url, '状态码:', res.statusCode);
				if (res.statusCode === 200) {
					resolve(res.data);
				} else {
					console.error('请求失败，状态码:', res.statusCode);
					uni.showToast({
						title: '请求失败',
						icon: 'none'
					});
					reject(res);
				}
			},
			fail: (err) => {
				console.error('请求失败:', err);
				// 区分超时错误与其他错误
				if (err.errMsg && err.errMsg.includes('timeout')) {
					console.error('请求超时，错误信息:', err.errMsg);
					reject({
						...err,
						isTimeout: true
					});
				} else {
					uni.showToast({
						title: '请求失败',
						icon: 'none'
					});
					reject(err);
				}
			}
		});
		
		// 记录请求任务实例，便于在需要时中断请求
		return requestTask;
	});
}

// AI客服对话接口
export const askAI = (message) => {
	return new Promise((resolve, reject) => {
		// 不在此处显示加载框，由UI界面控制
		console.log('调用AI接口, 消息:', message);
		
		request({
			url: '/Login/shAi',
			method: 'POST',
			data: { message },
			header: {
				'content-type': 'application/x-www-form-urlencoded'
			}
		})
		.then(res => {
			console.log('AI接口响应原始数据:', typeof res, res ? (typeof res === 'string' ? res.substring(0, 100) + '...' : JSON.stringify(res).substring(0, 100) + '...') : 'null');
			
			// 处理响应数据
			let responseData = res;
			try {
				// 如果是字符串，尝试解析为JSON
				if (typeof res === 'string') {
					responseData = JSON.parse(res);
					console.log('解析JSON成功');
				}
				
				// 提取文本回复
				if (responseData.textResponse) {
					// 清理数据，移除思考过程
					const cleanedResponse = responseData.textResponse.replace(/<think>[\s\S]*?<\/think>/g, '').trim();
					console.log('提取的回复文本:', cleanedResponse.substring(0, 100) + '...');
					resolve(cleanedResponse);
				} else {
					console.log('无法提取textResponse，返回原始响应');
					resolve(responseData);
				}
			} catch (error) {
				console.error('解析AI响应出错:', error);
				// 如果解析失败，返回原始响应
				resolve(res);
			}
		})
		.catch(err => {
			console.error('AI接口错误:', err);
			// 检查是否是超时错误
			if (err.isTimeout) {
				reject({...err, message: '请求超时，服务器响应时间过长，请稍后再试'});
			} else {
				reject(err);
			}
		});
	});
} 